package handler_sys

import (
	_ "go_web/internal/model"
	"go_web/internal/model/model_sys"
	"go_web/internal/req/req_sys"
	"go_web/internal/service/service_sys"
	"go_web/pkg/req"
	"go_web/pkg/res"
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"
)

type SysOrgUserHandler struct {
	SysOrgUserService *service_sys.SysOrgUserService
}

func NewSysOrgUserHandler(SysOrgUserService *service_sys.SysOrgUserService) *SysOrgUserHandler {
	return &SysOrgUserHandler{SysOrgUserService}
}

// Detail 查询SysOrgUser详情
// @Summary 查询SysOrgUser详情
// @Tags SysOrgUserHandler
// @Accept json
// @Produce json
// @Param id query string true "主键ID"
// @Success 200 {object} res.R[model_sys.SysOrgUser] "SysOrgUser"
// @Router /sys_org_user/detail [get]
func (h *SysOrgUserHandler) Detail(ctx *gin.Context) {
	id := ctx.Query("id")
	id64, err := strconv.ParseInt(id, 10, 64)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": "无效的ID"})
		return
	}
	SysOrgUser, err := h.SysOrgUserService.Detail(ctx, id64)
	if err != nil {
		ctx.JSON(http.StatusOK, res.NewR[string]().Fail("查询不到"))
		return
	}
	ctx.JSON(http.StatusOK, res.NewR[model_sys.SysOrgUser]().Ok(*SysOrgUser))
}

// Page 分页查询SysOrgUser
// @Summary 分页查询SysOrgUser
// @Tags SysOrgUserHandler
// @Accept json
// @Produce json
// @Param queryParams query req_sys.SysOrgUserPageReq false "分页请求参数"
// @Success 200 {object} res.R[res.PageRes]
// @Router /sys_org_user/page [get]
func (h *SysOrgUserHandler) Page(ctx *gin.Context) {
	var pageReq req_sys.SysOrgUserPageReq
	if err := ctx.ShouldBindQuery(&pageReq); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	page, err := h.SysOrgUserService.Page(ctx, pageReq)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	ctx.JSON(http.StatusOK, res.NewR[res.PageRes]().Ok(*page))
}

// Add 创建SysOrgUser
// @Summary 创建SysOrgUser
// @Tags SysOrgUserHandler
// @Accept json
// @Produce json
// @Param jsonParams body req_sys.SysOrgUserAddReq true "SysOrgUser"
// @Success 200 {object} res.R[int64] "操作结果"
// @Router /sys_org_user/add [post]
func (h *SysOrgUserHandler) Add(ctx *gin.Context) {
	var reqSys req_sys.SysOrgUserAddReq
	if err := ctx.ShouldBindJSON(&reqSys); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	id, err := h.SysOrgUserService.Add(ctx, reqSys)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	ctx.JSON(http.StatusOK, res.NewR[int64]().Ok(id))
}

// Edit 修改SysOrgUser
// @Summary 修改SysOrgUser
// @Tags SysOrgUserHandler
// @Accept json
// @Produce json
// @Param jsonParams body req_sys.SysOrgUserEditReq true "SysOrgUser"
// @Success 200 {object} res.R[int64] "操作结果"
// @Router /sys_org_user/edit [post]
func (h *SysOrgUserHandler) Edit(ctx *gin.Context) {
	var reqSys req_sys.SysOrgUserEditReq
	if err := ctx.ShouldBindJSON(&reqSys); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	n, err := h.SysOrgUserService.Edit(ctx, reqSys)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	ctx.JSON(http.StatusOK, res.NewR[int64]().Ok(n))
}

// Delete 删除SysOrgUser
// @Summary 删除SysOrgUser
// @Tags SysOrgUserHandler
// @Accept json
// @Produce json
// @Param jsonParams body req.IdsReq true "ID集合"
// @Success 200 {object} res.R[int64] "操作结果"
// @Router /sys_org_user/delete [post]
func (h *SysOrgUserHandler) Delete(ctx *gin.Context) {
	var idsReq req.IdsReq
	if err := ctx.ShouldBindJSON(&idsReq); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	n, err := h.SysOrgUserService.Delete(ctx, idsReq)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	ctx.JSON(http.StatusOK, res.NewR[int64]().Ok(n))
}

// GetUserListByOrgId 查询组织下的用户
// @Summary 查询组织下的用户
// @Tags SysOrgUserHandler
// @Accept json
// @Produce json
// @Param orgId query string true "组织ID"
// @Success 200 {object} res.R[res.PageRes]
// @Router /sys_org_user/user-list [get]
func (h *SysOrgUserHandler) GetUserListByOrgId(ctx *gin.Context) {
	orgIdStr := ctx.Query("orgId")
	orgId, err := strconv.ParseInt(orgIdStr, 10, 64)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": "无效的ID"})
		return
	}
	userList, err := h.SysOrgUserService.GetUserListByOrgId(ctx, orgId)
	if err != nil {
		ctx.JSON(http.StatusOK, res.NewR[string]().Fail(err.Error()))
		return
	}
	ctx.JSON(http.StatusOK, res.NewR[[]*model_sys.SysUser]().Ok(userList))
}
